436F - Banners - CodeForces Solution


brute force data structures dp *3000

Please click on ads to support us..

C++ Code:

#include<cstdio>
#include<algorithm>
const int D=200,N=1e5+2;
int c,i,j,k,t,n,m,w,f[502],r[502],h[502];
long long s,ans,x[N];
struct Z{
	int a,b;
	bool operator<(const Z&a)const{
		return b<a.b;
	}
}a[N];
int B(int i)
{
	int j,k,L=(i-1)*D,R=std::min(m,i*D);
	for(k=L+1,j=L;j++<R;x[k]<x[j]?k=j:0)x[j]+=1ll*j*f[i];
	for(f[i]=0,h[i]=N,r[i]=j=k;j++<R;h[i]=std::min(1ll*h[i],(x[k]-x[j])/(j-k)));
}
int main()
{
	for(scanf("%d%d",&n,&w);i++<n;m=m<a[i].a?a[i].a:m)
		scanf("%d%d",&a[i].a,&a[i].b);
	std::sort(a+1,a+n+1);
	for(i=1;c<=a[n].b+1;++c)
	{
		for(;i<=n&&a[i].b<c;++i,ans=k=0,B(t))
		{
			for(j=0;++j*D<=a[i].a;++f[j],!h[j]--?B(j):0);
			for(t=j,j=(j-1)*D;j++<a[i].a;x[j]+=j);
		}
		if(!k)for(j=0;j++*D<m;ans<s?ans=s,k=r[j]:0)s=x[r[j]]+1ll*f[j]*r[j];
		printf("%lld %d\n",ans+1ll*c*w*(n-i+1),k);
	}
}/*1692657872.6105003*/


Comments

Submit
0 Comments
More Questions

1665C - Tree Infection
1665D - GCD Guess
29A - Spit Problem
1097B - Petr and a Combination Lock
92A - Chips
1665B - Array Cloning Technique
1665A - GCD vs LCM
118D - Caesar's Legions
1598A - Computer Game
1605A - AM Deviation
1461A - String Generation
1585B - Array Eversion
1661C - Water the Trees
1459A - Red-Blue Shuffle
1661B - Getting Zero
1661A - Array Balancing
1649B - Game of Ball Passing
572A - Arrays
1455A - Strange Functions
1566B - MIN-MEX Cut
678C - Joty and Chocolate
1352E - Special Elements
1520E - Arranging The Sheep
1157E - Minimum Array
1661D - Progressions Covering
262A - Roma and Lucky Numbers
1634B - Fortune Telling
1358A - Park Lighting
253C - Text Editor
365B - The Fibonacci Segment